package com.micro.modual.controller;

import com.micro.core.resp.RespJson;
import com.micro.core.resp.RespJsonData;
import com.micro.core.resp.RespJsonPageData;
import com.micro.modual.model.bo.systemrole.RoleStatusBO;
import com.micro.modual.model.bo.systemrole.SystemRoleBO;
import com.micro.modual.model.dto.systemrole.SystemRoleDetailDTO;
import com.micro.modual.model.dto.systemrole.SystemRoleListDTO;
import com.micro.modual.service.SystemRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * <h1>系统角色表 控制器</h1>
 * @author levelcoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2020-08-04 00:27:46
 */
@Api(value = "角色管理",tags = "角色管理")
@RestController
@RequestMapping(value = "systemRole")
public class SystemRoleController {

    @Autowired
    private SystemRoleService systemRoleService;

    /**
     * <h2>查找系统角色表 列表</h2>
     * @param params 列表查询请求对象
     * @return List<SystemRoleListDTO> {@link SystemRoleListDTO}s  系统角色表 列表返回对象
     */
    @ApiOperation(value = "查询系统角色表列表" ,notes = "查询系统角色表列表")
    @GetMapping(value = "/findSystemRoleList")
    public RespJsonPageData<SystemRoleListDTO> findSystemRoleList(@RequestParam  Map<String,Object> params){
        return systemRoleService.findList(params,SystemRoleListDTO.class);
    }

    /**
     * <h2>根据主键编号查看系统角色表详情</h2>
     * @param id  系统角色表 主键编号
     * @return {@link SystemRoleDetailDTO}  系统角色表 详情
     */
    @ApiOperation(value = "查询系统角色表详情",notes = "根据主键编号，查询系统角色表详情")
    @GetMapping(value = "/findSystemRoleDetail/{id}")
    public RespJsonData<SystemRoleDetailDTO> findSystemRoleDetail(@PathVariable("id") Long id){
        return systemRoleService.findDetail(id,SystemRoleDetailDTO.class);
    }

    /**
     * <h2>新增系统角色表详情</h2>
     * @param systemRoleBO {@link SystemRoleBO} 系统角色表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "新增系统角色表",notes = "新增系统角色表")
    @PostMapping(value = "/addSystemRole")
    public RespJson addSystemRole(@RequestBody SystemRoleBO systemRoleBO){
        return systemRoleService.addSystemRole(systemRoleBO);
    }

    /**
     * <h2>修改系统角色表详情</h2>
     * @param systemRoleBO  {@link SystemRoleBO} 系统角色表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "修改系统角色表",notes = "修改系统角色表")
    @PostMapping(value = "/editSystemRole")
    public RespJson editSystemRole(@RequestBody SystemRoleBO systemRoleBO){
        return systemRoleService.editSystemRole(systemRoleBO);
    }

    /**
     * <h2>根据主键编号删除系统角色表信息</h2>
     * @param id  系统角色表 主键编号
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "删除系统角色表",notes = "根据地址ID，删除系统角色表")
    @PostMapping(value = "/deleteSystemRole/{id}")
    public RespJson deleteSystemRole(@PathVariable("id") Long id){
        return systemRoleService.deleteSystemRole(id);
    }

    /**
     * <h2>修改角色状态</h2>
     * @param roleStatusBO {@link RoleStatusBO} 修改角色状态请求对象
     * @return
     */
    @ApiOperation(value = "修改角色状态",notes = "修改角色状态")
    @PostMapping(value = "/modifyRoleStatus")
    public RespJson modifyRoleStatus(@RequestBody RoleStatusBO roleStatusBO){
        return systemRoleService.modifyRoleStatus(roleStatusBO);
    }

    /**
     * <h2>校验角色名是否存在</h2>
     * @param roleName 角色名称
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "校验角色名是否存在",notes = "校验角色名是否存在")
    @PostMapping(value = "/validataRoleExist/{roleName}")
    public RespJson validataRoleExist(@PathVariable("roleName") String roleName){
        return systemRoleService.validataRoleExist(roleName);
    }

    /**
     *
     * @return
     */
    @ApiOperation(value = "查询角色列表",notes = "查询角色列表")
    @GetMapping(value = "/findRoleList")
    public RespJsonData<List<SystemRoleListDTO>> findRoleList(){
        return systemRoleService.findRoleList();
    }

}

